home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / include / linux / netlink.h < prev    next >
C/C++ Source or Header  |  2009-10-16  |  5KB  |  156 lines

  1. #ifndef __LINUX_NETLINK_H
  2. #define __LINUX_NETLINK_H
  3.  
  4. #include <linux/socket.h> /* for sa_family_t */
  5. #include <linux/types.h>
  6.  
  7. #define NETLINK_ROUTE        0    /* Routing/device hook                */
  8. #define NETLINK_UNUSED        1    /* Unused number                */
  9. #define NETLINK_USERSOCK    2    /* Reserved for user mode socket protocols     */
  10. #define NETLINK_FIREWALL    3    /* Firewalling hook                */
  11. #define NETLINK_INET_DIAG    4    /* INET socket monitoring            */
  12. #define NETLINK_NFLOG        5    /* netfilter/iptables ULOG */
  13. #define NETLINK_XFRM        6    /* ipsec */
  14. #define NETLINK_SELINUX        7    /* SELinux event notifications */
  15. #define NETLINK_ISCSI        8    /* Open-iSCSI */
  16. #define NETLINK_AUDIT        9    /* auditing */
  17. #define NETLINK_FIB_LOOKUP    10    
  18. #define NETLINK_CONNECTOR    11
  19. #define NETLINK_NETFILTER    12    /* netfilter subsystem */
  20. #define NETLINK_IP6_FW        13
  21. #define NETLINK_DNRTMSG        14    /* DECnet routing messages */
  22. #define NETLINK_KOBJECT_UEVENT    15    /* Kernel messages to userspace */
  23. #define NETLINK_GENERIC        16
  24. /* leave room for NETLINK_DM (DM Events) */
  25. #define NETLINK_SCSITRANSPORT    18    /* SCSI Transports */
  26. #define NETLINK_ECRYPTFS    19
  27.  
  28. #define MAX_LINKS 32        
  29.  
  30. struct net;
  31.  
  32. struct sockaddr_nl
  33. {
  34.     sa_family_t    nl_family;    /* AF_NETLINK    */
  35.     unsigned short    nl_pad;        /* zero        */
  36.     __u32        nl_pid;        /* port ID    */
  37.            __u32        nl_groups;    /* multicast groups mask */
  38. };
  39.  
  40. struct nlmsghdr
  41. {
  42.     __u32        nlmsg_len;    /* Length of message including header */
  43.     __u16        nlmsg_type;    /* Message content */
  44.     __u16        nlmsg_flags;    /* Additional flags */
  45.     __u32        nlmsg_seq;    /* Sequence number */
  46.     __u32        nlmsg_pid;    /* Sending process port ID */
  47. };
  48.  
  49. /* Flags values */
  50.  
  51. #define NLM_F_REQUEST        1    /* It is request message.     */
  52. #define NLM_F_MULTI        2    /* Multipart message, terminated by NLMSG_DONE */
  53. #define NLM_F_ACK        4    /* Reply with ack, with zero or error code */
  54. #define NLM_F_ECHO        8    /* Echo this request         */
  55.  
  56. /* Modifiers to GET request */
  57. #define NLM_F_ROOT    0x100    /* specify tree    root    */
  58. #define NLM_F_MATCH    0x200    /* return all matching    */
  59. #define NLM_F_ATOMIC    0x400    /* atomic GET        */
  60. #define NLM_F_DUMP    (NLM_F_ROOT|NLM_F_MATCH)
  61.  
  62. /* Modifiers to NEW request */
  63. #define NLM_F_REPLACE    0x100    /* Override existing        */
  64. #define NLM_F_EXCL    0x200    /* Do not touch, if it exists    */
  65. #define NLM_F_CREATE    0x400    /* Create, if it does not exist    */
  66. #define NLM_F_APPEND    0x800    /* Add to end of list        */
  67.  
  68. /*
  69.    4.4BSD ADD        NLM_F_CREATE|NLM_F_EXCL
  70.    4.4BSD CHANGE    NLM_F_REPLACE
  71.  
  72.    True CHANGE        NLM_F_CREATE|NLM_F_REPLACE
  73.    Append        NLM_F_CREATE
  74.    Check        NLM_F_EXCL
  75.  */
  76.  
  77. #define NLMSG_ALIGNTO    4
  78. #define NLMSG_ALIGN(len) ( ((len)+NLMSG_ALIGNTO-1) & ~(NLMSG_ALIGNTO-1) )
  79. #define NLMSG_HDRLEN     ((int) NLMSG_ALIGN(sizeof(struct nlmsghdr)))
  80. #define NLMSG_LENGTH(len) ((len)+NLMSG_ALIGN(NLMSG_HDRLEN))
  81. #define NLMSG_SPACE(len) NLMSG_ALIGN(NLMSG_LENGTH(len))
  82. #define NLMSG_DATA(nlh)  ((void*)(((char*)nlh) + NLMSG_LENGTH(0)))
  83. #define NLMSG_NEXT(nlh,len)     ((len) -= NLMSG_ALIGN((nlh)->nlmsg_len), \
  84.                   (struct nlmsghdr*)(((char*)(nlh)) + NLMSG_ALIGN((nlh)->nlmsg_len)))
  85. #define NLMSG_OK(nlh,len) ((len) >= (int)sizeof(struct nlmsghdr) && \
  86.                (nlh)->nlmsg_len >= sizeof(struct nlmsghdr) && \
  87.                (nlh)->nlmsg_len <= (len))
  88. #define NLMSG_PAYLOAD(nlh,len) ((nlh)->nlmsg_len - NLMSG_SPACE((len)))
  89.  
  90. #define NLMSG_NOOP        0x1    /* Nothing.        */
  91. #define NLMSG_ERROR        0x2    /* Error        */
  92. #define NLMSG_DONE        0x3    /* End of a dump    */
  93. #define NLMSG_OVERRUN        0x4    /* Data lost        */
  94.  
  95. #define NLMSG_MIN_TYPE        0x10    /* < 0x10: reserved control messages */
  96.  
  97. struct nlmsgerr
  98. {
  99.     int        error;
  100.     struct nlmsghdr msg;
  101. };
  102.  
  103. #define NETLINK_ADD_MEMBERSHIP    1
  104. #define NETLINK_DROP_MEMBERSHIP    2
  105. #define NETLINK_PKTINFO        3
  106. #define NETLINK_BROADCAST_ERROR    4
  107. #define NETLINK_NO_ENOBUFS    5
  108.  
  109. struct nl_pktinfo
  110. {
  111.     __u32    group;
  112. };
  113.  
  114. #define NET_MAJOR 36        /* Major 36 is reserved for networking                         */
  115.  
  116. enum {
  117.     NETLINK_UNCONNECTED = 0,
  118.     NETLINK_CONNECTED,
  119. };
  120.  
  121. /*
  122.  *  <------- NLA_HDRLEN ------> <-- NLA_ALIGN(payload)-->
  123.  * +---------------------+- - -+- - - - - - - - - -+- - -+
  124.  * |        Header       | Pad |     Payload       | Pad |
  125.  * |   (struct nlattr)   | ing |                   | ing |
  126.  * +---------------------+- - -+- - - - - - - - - -+- - -+
  127.  *  <-------------- nlattr->nla_len -------------->
  128.  */
  129.  
  130. struct nlattr
  131. {
  132.     __u16           nla_len;
  133.     __u16           nla_type;
  134. };
  135.  
  136. /*
  137.  * nla_type (16 bits)
  138.  * +---+---+-------------------------------+
  139.  * | N | O | Attribute Type                |
  140.  * +---+---+-------------------------------+
  141.  * N := Carries nested attributes
  142.  * O := Payload stored in network byte order
  143.  *
  144.  * Note: The N and O flag are mutually exclusive.
  145.  */
  146. #define NLA_F_NESTED        (1 << 15)
  147. #define NLA_F_NET_BYTEORDER    (1 << 14)
  148. #define NLA_TYPE_MASK        ~(NLA_F_NESTED | NLA_F_NET_BYTEORDER)
  149.  
  150. #define NLA_ALIGNTO        4
  151. #define NLA_ALIGN(len)        (((len) + NLA_ALIGNTO - 1) & ~(NLA_ALIGNTO - 1))
  152. #define NLA_HDRLEN        ((int) NLA_ALIGN(sizeof(struct nlattr)))
  153.  
  154.  
  155. #endif    /* __LINUX_NETLINK_H */
  156.